home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / mermaid.c < prev    next >
C/C++ Source or Header  |  2000-05-04  |  7KB  |  240 lines

  1. /***************************************************************************
  2.  
  3. Mermaid
  4.  
  5. Driver by Zsolt Vasvari
  6.  
  7. ***************************************************************************/
  8.  
  9. #include "driver.h"
  10. #include "vidhrdw/generic.h"
  11.  
  12.  
  13. extern unsigned char* mermaid_background_videoram;
  14. extern unsigned char* mermaid_foreground_videoram;
  15. extern unsigned char* mermaid_foreground_colorram;
  16. extern unsigned char* mermaid_background_scrollram;
  17. extern unsigned char* mermaid_foreground_scrollram;
  18.  
  19.  
  20. void mermaid_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  21. void mermaid_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  22.  
  23.  
  24. static unsigned char *mermaid_AY8910_enable;
  25.  
  26. static WRITE_HANDLER( mermaid_AY8910_write_port_w )
  27. {
  28.     if (mermaid_AY8910_enable[0])  AY8910_write_port_0_w(offset, data);
  29.     if (mermaid_AY8910_enable[1])  AY8910_write_port_1_w(offset, data);
  30. }
  31.  
  32. static WRITE_HANDLER( mermaid_AY8910_control_port_w )
  33. {
  34.     if (mermaid_AY8910_enable[0])  AY8910_control_port_0_w(offset, data);
  35.     if (mermaid_AY8910_enable[1])  AY8910_control_port_1_w(offset, data);
  36. }
  37.  
  38.  
  39. static READ_HANDLER( mermaid_f800_r )
  40. {
  41.     // collision register active LO
  42.     // Bit 0
  43.     // Bit 1 - Sprite - Foreground
  44.     //return rand() & 0xff;
  45.     return 0x00;
  46. }
  47.  
  48.  
  49. static struct MemoryReadAddress readmem[] =
  50. {
  51.     { 0x0000, 0x9fff, MRA_ROM },
  52.     { 0xc000, 0xcbff, MRA_RAM },
  53.     { 0xd000, 0xd3ff, MRA_RAM },
  54.     { 0xd800, 0xd81f, MRA_RAM },
  55.     { 0xd840, 0xd8bf, MRA_RAM },
  56.     { 0xdc00, 0xdfff, MRA_RAM },
  57.     { 0xe000, 0xe000, input_port_0_r },
  58.     { 0xe800, 0xe800, input_port_1_r },
  59.     { 0xf000, 0xf000, input_port_2_r },
  60.     { 0xf800, 0xf800, mermaid_f800_r },
  61.     { -1 }  /* end of table */
  62. };
  63.  
  64. static struct MemoryWriteAddress writemem[] =
  65. {
  66.     { 0x0000, 0x9fff, MWA_ROM },
  67.     { 0xc000, 0xc7ff, MWA_RAM },
  68.     { 0xc800, 0xcbff, MWA_RAM, &mermaid_background_videoram, &videoram_size },
  69.     { 0xd000, 0xd3ff, MWA_RAM, &mermaid_foreground_videoram },
  70.     { 0xd800, 0xd81f, MWA_RAM, &mermaid_background_scrollram },
  71.     { 0xd840, 0xd85f, MWA_RAM, &mermaid_foreground_scrollram },
  72.     { 0xd880, 0xd8bf, MWA_RAM, &spriteram, &spriteram_size },
  73.     { 0xdc00, 0xdfff, MWA_RAM, &mermaid_foreground_colorram },
  74.     { 0xe000, 0xe001, MWA_RAM, &mermaid_AY8910_enable },
  75.     { 0xe007, 0xe007, interrupt_enable_w },
  76.     { 0xe807, 0xe807, MWA_NOP },    /* watchdog? */
  77.     { 0xf802, 0xf802, MWA_NOP },    /* ??? see memory map */
  78.     { 0xf806, 0xf806, mermaid_AY8910_write_port_w },
  79.     { 0xf807, 0xf807, mermaid_AY8910_control_port_w },
  80.     { -1 }  /* end of table */
  81. };
  82.  
  83.  
  84. INPUT_PORTS_START( mermaid )
  85.     PORT_START      /* DSW */
  86.     PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
  87.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  88.     PORT_DIPSETTING(    0x01, DEF_STR( Cocktail ) )
  89.     PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
  90.     PORT_DIPSETTING(    0x00, "3" )
  91.     PORT_DIPSETTING(    0x10, "4" )
  92.     PORT_DIPSETTING(    0x20, "5" )
  93.     PORT_DIPSETTING(    0x30, "6" )
  94.  
  95.     PORT_START      /* IN0 */
  96.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY )
  97.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  98.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY )
  99.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY )
  100.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
  101.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
  102.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
  103.  
  104.     PORT_START      /* IN1 */
  105.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
  106.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 )
  107.  
  108. INPUT_PORTS_END
  109.  
  110.  
  111. static struct GfxLayout background_charlayout =
  112. {
  113.     8,8,    /* 8*8 chars */
  114.     256,    /* 256 characters */
  115.     1,      /* 1 bit per pixel */
  116.     { 0 },  /* single bitplane */
  117.     { 0, 1, 2, 3, 4, 5, 6, 7},
  118.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8},
  119.     8*8     /* every char takes 8 consecutive bytes */
  120. };
  121.  
  122. static struct GfxLayout foreground_charlayout =
  123. {
  124.     8,8,    /* 8*8 chars */
  125.     1024,   /* 1024 characters */
  126.     2,      /* 2 bits per pixel */
  127.     { 0, 1024*8*8 },  /* the two bitplanes are separated */
  128.     { 0, 1, 2, 3, 4, 5, 6, 7},
  129.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8},
  130.     8*8     /* every char takes 8 consecutive bytes */
  131. };
  132.  
  133. static struct GfxLayout spritelayout =
  134. {
  135.     16,16,    /* 16*16 sprites */
  136.     256,    /* 256 sprites */
  137.     2,        /* 2 bits per pixel */
  138.     { 0, 256*32*8 },    /* the two bitplanes are separated */
  139.     { 0, 1, 2, 3, 4, 5, 6, 7,
  140.       8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
  141.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  142.       16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
  143.     32*8    /* every sprite takes 32 consecutive bytes */
  144. };
  145.  
  146.  
  147. static struct GfxDecodeInfo gfxdecodeinfo[] =
  148. {
  149.     { REGION_GFX1, 0, &foreground_charlayout,     0, 16 },
  150.     { REGION_GFX1, 0, &spritelayout,              0, 16 },
  151.     { REGION_GFX2, 0, &background_charlayout,  4*16, 2  },
  152.     { -1 } /* end of array */
  153. };
  154.  
  155.  
  156. static struct AY8910interface ay8910_interface =
  157. {
  158.     2,    /* 2 chips */
  159.     1500000,    /* 1.5 MHz ? */
  160.     { 25, 25 },
  161.     { 0 },
  162.     { 0 },
  163.     { 0 },
  164.     { 0 }
  165. };
  166.  
  167.  
  168. static struct MachineDriver machine_driver_mermaid =
  169. {
  170.     /* basic machine hardware */
  171.     {
  172.         {
  173.             CPU_Z80,
  174.             4000000,        /* 4.00 MHz??? */
  175.             readmem,writemem,0,0,
  176.             nmi_interrupt,1
  177.         }
  178.     },
  179.     60, DEFAULT_REAL_60HZ_VBLANK_DURATION,  /* frames per second, vblank duration */
  180.     1,    /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
  181.     0,
  182.  
  183.     /* video hardware */
  184.     32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
  185.     gfxdecodeinfo,
  186.     4*16+1, 4*16+2*2,
  187.     mermaid_vh_convert_color_prom,
  188.  
  189.     VIDEO_TYPE_RASTER,
  190.     0,
  191.     generic_vh_start,
  192.     generic_vh_stop,
  193.     mermaid_vh_screenrefresh,
  194.  
  195.     /* sound hardware */
  196.     0,0,0,0,
  197.     {
  198.         {
  199.             SOUND_AY8910,
  200.             &ay8910_interface
  201.         }
  202.     }
  203. };
  204.  
  205.  
  206. /***************************************************************************
  207.  
  208.   Game driver(s)
  209.  
  210. ***************************************************************************/
  211. ROM_START( mermaid )
  212.     ROM_REGION( 0x10000, REGION_CPU1 )       /* 64k for code */
  213.     ROM_LOAD( "g960_32.15",      0x0000, 0x1000, 0x8311f090 )
  214.     ROM_LOAD( "g960_33.16",      0x1000, 0x1000, 0x9f274fc4 )
  215.     ROM_LOAD( "g960_34.17",      0x2000, 0x1000, 0x5f910179 )
  216.     ROM_LOAD( "g960_35.18",      0x3000, 0x1000, 0xdb1868a1 )
  217.     ROM_LOAD( "g960_36.19",      0x4000, 0x1000, 0x178a3567 )
  218.     ROM_LOAD( "g960_37.20",      0x5000, 0x1000, 0x7d602527 )
  219.     ROM_LOAD( "g960_38.21",      0x6000, 0x1000, 0xbf9f623c )
  220.     ROM_LOAD( "g960_39.22",      0x7000, 0x1000, 0xdf0db390 )
  221.     ROM_LOAD( "g960_40.23",      0x8000, 0x1000, 0xfb7aba3f )
  222.     ROM_LOAD( "g960_41.24",      0x9000, 0x1000, 0xd022981d )
  223.  
  224.     ROM_REGION( 0x4000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  225.     ROM_LOAD( "g960_45.77",      0x0000, 0x1000, 0x1f6b735e )
  226.     ROM_LOAD( "g960_44.76",      0x1000, 0x1000, 0xfd76074e )
  227.     ROM_LOAD( "g960_47.79",      0x2000, 0x1000, 0x3b7d4ad0 )
  228.     ROM_LOAD( "g960_46.78",      0x3000, 0x1000, 0x50c117cd )
  229.  
  230.     ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  231.     ROM_LOAD( "g960_43.26",      0x0000, 0x1000, 0x6f077417 )
  232.  
  233.     ROM_REGION( 0x0040, REGION_PROMS )
  234.     ROM_LOAD( "col_a",           0x0000, 0x0020, 0xef87bcd6 )
  235.     ROM_LOAD( "col_b",           0x0020, 0x0020, 0xca48abdd )
  236. ROM_END
  237.  
  238.  
  239. GAMEX( 1982, mermaid, 0, mermaid, mermaid, 0, ROT0, "Rock-ola", "Mermaid", GAME_NOT_WORKING )
  240.